package  main.java.leetcode.editor.cn;
//2022-04-06 17:25:38
//给定一个含有 n 个正整数的数组和一个正整数 target 。 
//
// 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长
//度。如果不存在符合条件的子数组，返回 0 。 
//
// 
//
// 示例 1： 
//
// 
//输入：target = 7, nums = [2,3,1,2,4,3]
//输出：2
//解释：子数组 [4,3] 是该条件下的长度最小的子数组。
// 
//
// 示例 2： 
//
// 
//输入：target = 4, nums = [1,4,4]
//输出：1
// 
//
// 示例 3： 
//
// 
//输入：target = 11, nums = [1,1,1,1,1,1,1,1]
//输出：0
// 
//
// 
//
// 提示： 
//
// 
// 1 <= target <= 109 
// 1 <= nums.length <= 105 
// 1 <= nums[i] <= 105 
// 
//
// 
//
// 进阶： 
//
// 
// 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。 
// 
//
// 
//
// 注意：本题与主站 209 题相同：https://leetcode-cn.com/problems/minimum-size-subarray-sum/ 
//
// Related Topics 数组 二分查找 前缀和 滑动窗口 
// 👍 55 👎 0

class TwoVG8Kg {
    public static void main(String[] args) {
        //创建该题目的对象方便调用
        Solution solution = new TwoVG8Kg().new Solution();
        int[] test = {2,3,1,2,4,3};
        System.out.println(solution.minSubArrayLen(7, test));
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int size = Integer.MAX_VALUE;  //记录当前满足条件的最小值

        int fastIndex = 0;
        int slowIndex = 0;
        int sum = 0;
        for(;fastIndex<nums.length;){
            sum += nums[fastIndex];
            if(slowIndex == 0 && fastIndex == nums.length-1 && sum < target){
                return 0;
            }
            while (sum>=target){
//                if (sum>=target){
                    size = size >= (fastIndex-slowIndex+1) ? (fastIndex-slowIndex+1): size;
                    sum -= nums[slowIndex];
                    slowIndex++;
//                }
            }
            fastIndex++;
        }


        return size;

    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
